home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / quodlibet / qltk / downloader.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  7KB  |  166 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. import os
  5. import urllib
  6. from gi.repository import Gtk, Pango, GLib
  7. from quodlibet import qltk
  8. from quodlibet import util
  9. from quodlibet.util import connect_obj
  10. from quodlibet.qltk.views import AllTreeView
  11.  
  12. class DownloadWindow(qltk.UniqueWindow):
  13.     downloads = None
  14.     
  15.     def download(klass, source, target, parent = None):
  16.         if klass.downloads is None:
  17.             klass.downloads = Gtk.ListStore(object, object, int, object)
  18.         win = DownloadWindow(parent)
  19.         win.show()
  20.         win._download(source, target)
  21.  
  22.     download = classmethod(download)
  23.     
  24.     def __init__(self, parent = None):
  25.         if self.is_not_unique():
  26.             return None
  27.         None(DownloadWindow, self).__init__()
  28.         self.set_title('Quod Libet - ' + _('Downloads'))
  29.         self.set_default_size(300, 150)
  30.         self.set_border_width(12)
  31.         self.set_transient_for(qltk.get_top_parent(parent))
  32.         self._DownloadWindow__timeout = None
  33.         view = AllTreeView()
  34.         view.connect('popup-menu', self._DownloadWindow__popup_menu)
  35.         view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
  36.         view.set_model(self.downloads)
  37.         view.set_rules_hint(True)
  38.         render = Gtk.CellRendererText()
  39.         render.set_property('ellipsize', Pango.EllipsizeMode.START)
  40.         column = Gtk.TreeViewColumn(_('Filename'), render)
  41.         column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
  42.         column.set_expand(True)
  43.         
  44.         def cell_data_name(column, cell, model, iter, data):
  45.             cell.set_property('text', model[iter][1].name)
  46.  
  47.         column.set_cell_data_func(render, cell_data_name)
  48.         view.append_column(column)
  49.         render = Gtk.CellRendererText()
  50.         column = Gtk.TreeViewColumn(_('Size'), render)
  51.         column.set_sizing(Gtk.TreeViewColumnSizing.GROW_ONLY)
  52.         
  53.         def cell_data_size(column, cell, model, iter, data):
  54.             if model[iter][2] == 0:
  55.                 size = _('Queued')
  56.             else:
  57.                 size = util.format_size(model[iter][1].tell())
  58.             cell.set_property('text', size)
  59.  
  60.         column.set_cell_data_func(render, cell_data_size)
  61.         view.append_column(column)
  62.         sw = Gtk.ScrolledWindow()
  63.         sw.add(view)
  64.         sw.set_shadow_type(Gtk.ShadowType.IN)
  65.         sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
  66.         self.add(sw)
  67.         connect_obj(self, 'delete-event', DownloadWindow._DownloadWindow__delete_event, self)
  68.         self.get_child().show_all()
  69.  
  70.     
  71.     def __update(self):
  72.         for row in self.downloads:
  73.             self.downloads.row_changed(row.path, row.iter)
  74.         
  75.         return True
  76.  
  77.     
  78.     def __popup_menu(self, view):
  79.         selection = view.get_selection()
  80.         (model, paths) = selection.get_selected_rows()
  81.         if model:
  82.             iters = map(model.get_iter, paths)
  83.             menu = Gtk.Menu()
  84.             item = Gtk.ImageMenuItem(Gtk.STOCK_STOP)
  85.             connect_obj(item, 'activate', self._DownloadWindow__stop_download, iters)
  86.             menu.append(item)
  87.             menu.connect('selection-done', (lambda m: m.destroy()))
  88.             menu.show_all()
  89.             return view.popup_menu(menu, 0, Gtk.get_current_event_time())
  90.  
  91.     
  92.     def __start_next(self):
  93.         started = len(filter((lambda row: row[2] != 0), self.downloads))
  94.         iter = self.downloads.get_iter_first()
  95.         while iter is not None:
  96.             if started >= 2:
  97.                 break
  98.             if self.downloads[iter][2] == 0:
  99.                 url = urllib.urlopen(self.downloads[iter][3])
  100.                 sock = url.fp._sock
  101.                 sock.setblocking(0)
  102.                 self.downloads[iter][0] = sock
  103.                 sig_id = qltk.io_add_watch(sock, GLib.PRIORITY_DEFAULT, GLib.IO_IN | GLib.IO_ERR | GLib.IO_HUP, self._DownloadWindow__got_data, self.downloads[iter][1], iter)
  104.                 self.downloads[iter][2] = sig_id
  105.                 started += 1
  106.             iter = self.downloads.iter_next(iter)
  107.  
  108.     
  109.     def __stop_download(self, iters):
  110.         for iter in iters:
  111.             if self.downloads[iter][2] != 0:
  112.                 GLib.source_remove(self.downloads[iter][2])
  113.             if self.downloads[iter][0]:
  114.                 self.downloads[iter][0].close()
  115.             self.downloads[iter][1].close()
  116.             os.unlink(self.downloads[iter][1].name)
  117.             self.downloads.remove(iter)
  118.             self._DownloadWindow__start_next()
  119.         
  120.  
  121.     
  122.     def present(self):
  123.         super(DownloadWindow, self).present()
  124.         if self._DownloadWindow__timeout is None:
  125.             self._DownloadWindow__timeout = GLib.timeout_add(1000, self._DownloadWindow__update)
  126.  
  127.     
  128.     def __delete_event(self, event):
  129.         self.hide()
  130.         if self._DownloadWindow__timeout is not None:
  131.             GLib.source_remove(self._DownloadWindow__timeout)
  132.         self._DownloadWindow__timeout = None
  133.         return True
  134.  
  135.     
  136.     def _download(self, source, target):
  137.         fileobj = file(target, 'wb')
  138.         self.downloads.append(row = [
  139.             None,
  140.             fileobj,
  141.             0,
  142.             source])
  143.         self._DownloadWindow__start_next()
  144.  
  145.     
  146.     def __got_data(self, src, condition, fileobj, iter):
  147.         if condition in [
  148.             GLib.IO_ERR,
  149.             GLib.IO_HUP]:
  150.             fileobj.close()
  151.             src.close()
  152.             self.downloads.remove(iter)
  153.             self._DownloadWindow__start_next()
  154.             return False
  155.         buf = None.recv(1048576)
  156.         if buf:
  157.             fileobj.write(buf)
  158.         else:
  159.             fileobj.close()
  160.             src.close()
  161.             self.downloads.remove(iter)
  162.             self._DownloadWindow__start_next()
  163.         return bool(buf)
  164.  
  165.  
  166.